#include "datebase.h"

//QSqlDatabase DateBase::db; // 定义静态成员变量

DateBase::DateBase(QWidget *parent) : QWidget(parent)
{
    // 链接数据库
    if (!initDatabase()) {
            QMessageBox::critical(this, "错误", "无法初始化数据库");
            close();
        }
}

//// 初始化数据库
//bool DateBase::initDatabase()
//{
//    if (db.isValid()) {
//            // 如果已经有一个有效的数据库连接，则直接返回true
//            qDebug() << "如果已经有一个有效的数据库连接，则直接返回true";
//            return true;
//        }

//    db = QSqlDatabase::addDatabase("QSQLITE");
//    db.setDatabaseName("user.db");

//    if (!db.open()) {
//        qDebug() << "无法打开数据库连接!";
//        return false;
//    }

//    QSqlQuery query;
//    bool success = query.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password TEXT, phone TEXT);");
//    if (!success) {
//        qDebug() << "创建表格失败:" << query.lastError();
//    }
//    return success;
//}

bool DateBase::initDatabase()
{
    if (QSqlDatabase::contains("connection_user")) {
        db = QSqlDatabase::database("connection_user");
    } else {
        db = QSqlDatabase::addDatabase("QSQLITE", "connection_user");
        db.setDatabaseName("user.db");

        if (!db.open()) {
            qDebug() << "无法打开数据库连接!";
            return false;
        }

        QSqlQuery query(db);
        bool success = query.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password TEXT, phone TEXT);");
        if (!success) {
            qDebug() << "创建表格失败:" << query.lastError();
        }
    }
    return true;
}

DateBase::~DateBase()
{
    if (db.isOpen()) {
        db.close(); // 确保在析构函数中关闭数据库连接
    }
    QSqlDatabase::removeDatabase("connection_user"); // 移除连接
}

// 添加数据 并判断是否有重复的账号和手机号
bool DateBase::registerUser(const QString &username, const QString &password, const QString &phone)
{
    if (!db.isOpen()) {
            qDebug() << "数据库未打开";
            return false;
        }
    // 检查是否存在相同的用户名或手机号
        QSqlQuery checkQuery(db);
        checkQuery.prepare("SELECT * FROM users WHERE username=:username OR phone=:phone");
        checkQuery.bindValue(":username", username);
        checkQuery.bindValue(":phone", phone);

        if (!checkQuery.exec()) {
            qDebug() << "检查用户信息失败:" << checkQuery.lastError();
            return false;
        }

        if (checkQuery.next()) { // 如果找到了匹配项
            if (checkQuery.value("username") == username) {
                qDebug() << "注册失败: 用户名已存在";
                QMessageBox::critical(this, "注册失败", "用户名已存在");
            } else if (checkQuery.value("phone") == phone) {
                qDebug() << "注册失败: 手机号已被注册";
                QMessageBox::critical(this, "注册失败", "手机号已被注册");
            }
            return false; // 注册失败
        }

        // 插入新用户数据
        QSqlQuery insertQuery(db);
        insertQuery.prepare("INSERT INTO users (username, password, phone) VALUES (:username, :password, :phone)");
        insertQuery.bindValue(":username", username);
        insertQuery.bindValue(":password", password);
        insertQuery.bindValue(":phone", phone);

        bool success = insertQuery.exec();
        if (!success) {
            qDebug() << "注册失败:" << insertQuery.lastError();
             QMessageBox::critical(this, "错误", "注册失败！");
        }
        QMessageBox::information(this, "成功", "注册成功！");
        //accept(); // 关闭对话框，表示注册成功
        return success;

}

bool DateBase::loginUser(const QString &username, const QString &password)
{
    if (!db.isOpen()) {
            qDebug() << "数据库未打开";
            return false;
        }
    QSqlQuery query(db);
    query.prepare("SELECT * FROM users WHERE username=:username AND password=:password");
    query.bindValue(":username", username);
    query.bindValue(":password", password);
    bool success = query.exec();
    if (!success || !query.next()) { // 如果没有找到匹配项或执行失败
        qDebug() << "登录失败:" << query.lastError();
        return false;
    }
    return true; // 登录成功
}
